; 
;  TOPPERS ATK2
;      Toyohashi Open Platform for Embedded Real-Time Systems
;      Automotive Kernel Version 2
;  
;   Copyright (C) 2012-2013 by Embedded and Real-Time Systems Laboratory
;               Graduate School of Information Science, Nagoya Univ., JAPAN
;   Copyright (C) 2013-2014 by Witz Corporation, JAPAN
;  
;  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
;  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
;  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
;  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
;      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
;      スコード中に含まれていること．
;  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
;      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
;      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
;      の無保証規定を掲載すること．
;  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
;      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
;      と．
;    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
;        作権表示，この利用条件および下記の無保証規定を掲載すること．
;    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
;        報告すること．
;  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
;      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
;      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
;      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
;      免責すること．
;
;  本ソフトウェアは，AUTOSAR（AUTomotive Open System ARchitecture）仕
;  様に基づいている．上記の許諾は，AUTOSARの知的財産権を許諾するもので
;  はない．AUTOSARは，AUTOSAR仕様に基づいたソフトウェアを商用目的で利
;  用する者に対して，AUTOSARパートナーになることを求めている．
;
;  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
;  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
;  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
;  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
;  の責任を負わない．  
;
;  $Id: start.asm 830 2017-09-23 02:08:45Z ertl-honda $  
;

$include (v850asm.inc)

# *****************************************************************************
# CCRH予約シンボルの外部ラベル宣言(gp、ep用)
# *****************************************************************************
	.extern __gp_data, 4
	.extern __ep_data, 4

# *****************************************************************************
# セクション初期化テーブル
# *****************************************************************************
	.section	".INIT_DSEC.const", const
	.align	4
	.dw	#__s.data,	#__e.data,	#__s.data.R

	.section	".INIT_BSEC.const", const
	.align	4
	.dw	#__s.bss,	#__e.bss

# *****************************************************************************
# 関数の外部ラベル宣言
# *****************************************************************************
	.extern _main
	.extern	_hardware_init_hook
	.extern	_software_init_hook
	.extern	__start
	.extern	__ostkpt

;-----------------------------------------------------------------------------
; スタートアップルーチン本体
;-----------------------------------------------------------------------------
.section ".text", text
	.align	2
__start:
	#マスカブル割込みの禁止
	di

;-----------------------------------------------------------------------------
; 各種ポインタの初期化(GP/EP/SP)
;-----------------------------------------------------------------------------
	mov    #__gp_data, gp
	mov    #__ep_data, ep
	Lea		_kernel_ostkpt, sp	; システムスタックの開始アドレスをSPに設定
	ld.w	0[sp], sp

;-----------------------------------------------------------------------------
; hardware_init_hook の呼出し
;-----------------------------------------------------------------------------
;	jarl	_hardware_init_hook, lp

;-----------------------------------------------------------------------------
; dataセクションの初期値コピーおよびbssセクションのゼロクリア
;-----------------------------------------------------------------------------
	mov	#__s.INIT_DSEC.const, r6
	mov	#__e.INIT_DSEC.const, r7
	mov	#__s.INIT_BSEC.const, r8
	mov	#__e.INIT_BSEC.const, r9
	jarl32	__INITSCT_RH, lp	;  initialize RAM area

;-----------------------------------------------------------------------------
;  FPUを有効に
;-----------------------------------------------------------------------------
$ifdef TOPPERS_USE_HFLOAT
	stsr psw, r12       ;/* load psw */
	mov  0x00010000,r13 ;/* PSW.CU0(PSW[16]) = 1 */
	or   r13, r12
	ldsr r12, psw       ;/* store psw */
$endif ;/* TOPPERS_USE_HFLOAT */

;-----------------------------------------------------------------------------
;  software_init_hook を呼出し
;-----------------------------------------------------------------------------
;	jarl	_software_init_hook, lp

;-----------------------------------------------------------------------------
; ターゲット依存のハードウェアの初期化コードへ
;-----------------------------------------------------------------------------
	jarl    _kernel_target_hardware_initialize, lp

;-----------------------------------------------------------------------------
; main関数へ分岐
;-----------------------------------------------------------------------------
	jarl    _main, lp

;-----------------------------------------------------------------------------
; mainから戻ってきた後の処理
;-----------------------------------------------------------------------------
__exit:
	halt    
__startend:

;-----------------------------------------------------------------------------
;	dummy section to avoid linker warning
;-----------------------------------------------------------------------------
	.section	".data", data
.L.dummy.data:
	.section	".bss", bss
.L.dummy.bss:
	.section	".const", const
.L.dummy.const:
	.section	".stack.bss", bss
.L.dummy.stack.bss:
	.section	"EIINTTBL", const
	.align 512
.L.dummy.EIINTTBL: